クランバトル/周回スコア計算の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- 移動:バックアップ
- 最新のバージョン:2025-02-11 20:18:02
- バージョン:(Rev:5ezYRz0GwP)2025-02-11 14:18:57
| Old | New | 差分 | |
|---|---|---|---|
| 1 | 1 | * 周回スコア表の計算プログラム [#lhgno88] | |
| 2 | 2 | クランバトル第41回(2021/07)以降に対応しています。 | |
| 3 | 3 | 第79回(2024/09)の調整まで実装。 | |
| 4 | + | プログラミング言語Pythonの仕様により、コピペした後にインデントを調整する必要があります。 | |
| 4 | 5 | ||
| 5 | 6 | #!/usr/bin/env python3 | |
| 6 | 7 | ||
| 43 | 44 | boss_hp.append( [ 9,12,15,18,23] ) | |
| 44 | 45 | boss_hp.append( [12,15,20,23,30] ) | |
| 45 | 46 | boss_hp.append( [35,40,45,50,58] ) | |
| 46 | - | elif version >= 20230 | |
| 47 | + | elif version >= 202304: | |
| 47 | 48 | boss_hp.append( [ 6, 8,10,12,15] ) | |
| 48 | 49 | boss_hp.append( [ 8,10,13,15,20] ) | |
| 49 | 50 | boss_hp.append( [20,22,25,28,30] ) | |
| 54 | 55 | # 4段階目(全5段階の場合のみ) | |
| 55 | 56 | if False: | |
| 56 | 57 | pass | |
| 57 | - | elif version >= 20230 | |
| 58 | + | elif version >= 202304: | |
| 58 | 59 | pass | |
| 59 | 60 | elif version >= 202204: | |
| 60 | 61 | boss_hp.append( [22,23,27,29,31] ) | |
| 71 | 72 | boss_hp.append( [540,560,600,620,640] ) | |
| 72 | 73 | elif version >= 202309: | |
| 73 | 74 | boss_hp.append( [270,280,300,310,320] ) | |
| 74 | - | elif version >= 20230 | |
| 75 | + | elif version >= 202304: | |
| 75 | 76 | boss_hp.append( [200,210,230,240,250] ) | |
| 76 | 77 | elif version >= 202209: | |
| 77 | 78 | boss_hp.append( [145,150,175,195,210] ) | |
| 89 | 90 | boss_mult.append( [ Fraction(x,10) for x in [16,16,18,19,20] ] ) | |
| 90 | 91 | if False: | |
| 91 | 92 | pass | |
| 92 | - | elif version >= 20230 | |
| 93 | + | elif version >= 202304: | |
| 93 | 94 | boss_mult.append( [ Fraction(x,10) for x in [20,20,21,21,22] ] ) | |
| 94 | 95 | boss_mult.append( [ Fraction(x,10) for x in [45,45,47,48,50] ] ) | |
| 95 | 96 | else: | |
| 104 | 105 | pass | |
| 105 | 106 | elif version >= 202309: | |
| 106 | 107 | loop_sep = [ 0, 6,22] | |
| 107 | - | elif version >= 20230 | |
| 108 | + | elif version >= 202304: | |
| 108 | 109 | loop_sep = [ 3, 9,25] | |
| 109 | 110 | elif version >= 202112: | |
| 110 | 111 | loop_sep = [ 3,10,30,38] | |
| 129 | 130 | ||
| 130 | 131 | stage_scores = [] # 各段階の、全ボスを1体ずつ倒した場合の合計スコア | |
| 131 | 132 | stage_scores_diff = [] # 各段階の途中周回での、完了に必要な最大値と最小値の差 | |
| 132 | - | for i in range(len( | |
| 133 | - | score = | |
| 133 | + | for i in range(len(boss_hp)): | |
| 134 | + | scores = [] | |
| 134 | 135 | for hp, mult in zip(boss_hp[i], boss_mult[i]): | |
| 135 | - | score += round(hp_unit * hp * mult) | |
| 136 | - | score_diff = score - round(hp_unit * boss_hp[i][0] * boss_mult[i][0]) | |
| 136 | + | scores.append( round(hp_unit * hp * mult) ) | |
| 137 | + | score = sum(scores) | |
| 138 | + | score_diff = score - min(scores) | |
| 137 | 139 | stage_scores.append(score) | |
| 138 | 140 | stage_scores_diff.append(score_diff) | |
| 139 | 141 | ||
| 140 | 142 | loop_scores = [] # 各周回の、周回完了に必要なスコアの最小値と最大値の対 | |
| 143 | + | stage_loop_begin = [0] + loop_sep[:] | |
| 144 | + | stage_loop_end = loop_sep[:] + [loop_max+1] | |
| 141 | 145 | score = 0 | |
| 142 | 146 | for i in range(len(loop_sep)+1): | |
| 143 | - | loop_begin = 0 | |
| 144 | - | if i > 0: | |
| 145 | - | loop_begin = loop_sep[i-1] | |
| 146 | - | loop_end = loop_max+1 | |
| 147 | - | if i < len(loop_sep): | |
| 148 | - | loop_end = loop_sep[i] | |
| 147 | + | loop_begin = stage_loop_begin[i] | |
| 148 | + | loop_end = stage_loop_end[i] | |
| 149 | + | if loop_begin >= loop_end: | |
| 150 | + | continue | |
| 149 | 151 | for j in range(loop_end - loop_begin - 1): | |
| 150 | 152 | score += stage_scores[i] | |
| 151 | 153 | score_min = score | |
| 152 | 154 | score_max = score + stage_scores_diff[i] | |
| 153 | 155 | loop_scores.append( (score_min, score_max) ) | |
| 154 | - | if i < len(loop_sep) | |
| 156 | + | if i < len(loop_sep): | |
| 155 | 157 | score += stage_scores[i] | |
| 156 | 158 | loop_scores.append( (score, score) ) | |
| 157 | 159 | ||
| 159 | 161 | # ここから計算結果の出力 | |
| 160 | 162 | # | |
| 161 | 163 | ||
| 162 | - | for i in range(len(loop_scores)): | |
| 163 | - | iloop = i+1 | |
| 164 | - | score_min, score_max = loop_scores[i] | |
| 164 | + | for iloop,v in enumerate(loop_scores,1): | |
| 165 | + | score_min, score_max = v | |
| 165 | 166 | if score_min == score_max: | |
| 166 | 167 | print( '|{:d}|>|CENTER:{:,d}|'.format(iloop, score_min) ) | |
| 167 | 168 | else: | |